package top.saodisheng.proxy;

/**
 * 静态代理
 * 静态代理就是通过实现被代理对象所实现的接口，内部保存了被代理对象，在实现的方法中对处理逻辑进行增强，
 * 实际的方法执行调用了被代理对象的方法。可以看到静态代理比较简洁直观，但是在复杂的场景下，需要为每个目标对象创建一个代理类，
 * 不易于维护，我们更加注重的应该是业务开发，对于这一层增强处理应该抽取出来。
 * @author saodisheng
 * @date 2021/9/13
 */
public class ProxyEchoService implements EchoService {
	/**
	 * 被代理对象
	 */
	private final EchoService echoService;

	public ProxyEchoService(EchoService echoService) {
		this.echoService = echoService;
	}

	@Override
	public String echo(String message) {
		long startTime = System.currentTimeMillis();
		// 调用被代理对象的方法
		String result = echoService.echo(message);
		long costTime = System.currentTimeMillis() - startTime;
		System.out.println("echo 方法执行的实现：" + costTime + " ms.");
		return result;
	}
}